<?php
/**
 * 17、设计模式学习-责任链模式
 * 就餐控制器
 * 2019年12月28日18:36:41
 */
namespace Application\Controller;

use Application\Common\Responsichain\NoUseResponsichain\ZRoadRestaurant as ZRoadRestaurant;
use Application\Common\Responsichain\UseResponsichain\ZRoadRestaurant as ZRoad;

class MealResponsibilityChainController extends BaseController
{
    // 没有使用责任链模式，选定一家餐厅就餐
    public function noUseChainOfResponsibility()
    {
        // 创建餐厅
        $restaurant_1 = new ZRoadRestaurant('餐厅 1');
        $restaurant_2 = new ZRoadRestaurant('餐厅 2');
        $restaurant_3 = new ZRoadRestaurant('餐厅 3');
        $restaurants = array(
            $restaurant_1,
            $restaurant_2,
            $restaurant_3,
        );
        // 就餐
        foreach($restaurants as $k => $v) {
            $result = $v -> haveMeal();
            if($result){
                break;
            }
        }
        if(!$result){
            echo '没有餐厅可以就餐';
        }
    }
    // 使用责任链模式，选定一家餐厅就餐
    public function useChainOfResponsibility()
    {
        // 创建餐厅
        $restaurant_1 = new ZRoad('餐厅 1');
        $restaurant_2 = new ZRoad('餐厅 2');
        $restaurant_3 = new ZRoad('餐厅 3');
        // 设置责任链
        $restaurant_1 -> setChain($restaurant_2);
        $restaurant_2 -> setChain($restaurant_3);
        // 就餐
        $result = $restaurant_1 -> haveMeal();
        if(!$result){
            echo '没有餐厅可以就餐';
        }
    }
}
